Scroll to navigation

SUDO(8) MAINTENANCE COMMANDS SUDO(8)

名前

sudo, sudoedit - コマンドを別のユーザとして実行する

書式

sudo -h | -K | -k | -L | -V

sudo -v [-AknS] [-p prompt]

sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U username] [-u username|#uid] [command]

sudo [-AbEHnPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u username|#uid] [VAR=value] [-i | -s] [command]

sudoedit [-AnS] [-C fd] [-g groupname|#gid] [-p prompt] [-u username|#uid] file ...

説明

sudo を使用すると、許可されたユーザが、スーパーユーザを始め 自分以外のユーザに変身して、コマンドを実行することが可能になる。 許可の範囲については、sudoers ファイルで指定する。実 uid と gid 、 実効 uid と gid は、変身の対象になるユーザの、passwd ファイルに 明記されているものと同一になるようにセットされる。所属するグループに ついても (-P オプションが指定されていないかぎり)、group ファイルに 基づいて初期化される。sudo を起動するユーザが root だったり、 変身の対象になるユーザが sudo を起動するユーザと同一だったり する場合は、パスワードは要求されない。それ以外の場合は、パスワードを 要求して、本人であることを証明するように求めるのが、sudo の デフォルトの動作である (注意: デフォルトの設定では、 求められるのは sudo を実行するユーザのパスワードであって、 root のパスワードではない)。ユーザの認証がすむと、タイムスタンプが 更新され、ユーザはしばらくの間 (sudoers で設定が変更されて いないかぎり 5 分間) パスワードなしで sudo を 使用することができる。

sudoedit というコマンド名で起動するのは、sudo-e オプション (下記参照) を付けて実行するのと同じである。

sudo/etc/sudoers ファイルを参照して、誰に sudo を 使用する権限があるかを判断する。sudo-v オプションを 付けて動かすと、ユーザはコマンドを実行せずに、タイムスタンプを 更新することができる。ユーザが 5 分以内にパスワードを 入力しないと、パスワードプロンプトそのものも (sudoers で設定が 変更されていないかぎり)、タイムアウトする。

sudoers ファイルに名前の載っていないユーザが sudo を使って コマンドを実行しようとすると、しかるべき権威者にメールが送付される。 誰にメールを送るかは、プログラムを configure するときに決めることが できるが、sudoers ファイルで指定してもよい (デフォルトの宛先は root である)。sudo を使用する権限のない ユーザが、-l-v オプションを付けて sudo を 実行しようとしても、メールは送付されないことに注意してほしい。 これによって、自分が sudo を使用できるかどうか、ユーザが自分で 判断できるようになっているのである。

sudo が root によって実行されたとき、環境変数 SUDO_USER がセットされていると、sudo は 実際のユーザが誰かを決めるのに、その変数の値を使用することになる。ユーザは この動作を利用することで、すでにルート・シェルを呼び出しているときでも、 自分がそこからさらに sudo 経由で使用したコマンドのログを取ることが できる。またこのことによって、sudo で実行したスクリプトや プログラムから呼び出される場合でも、-e オプションが相変わらず 便利なものになっている。とは言え、こうした場合でも、sudoers の 参照は、やはり root に対してなされるのであって、 SUDO_USER が指定するユーザに対してではないことに 注意してほしい。

sudo は、実行の試みが成功した場合も失敗した場合も、そのことを (エラー内容とともに) syslog(3) なり独自のログファイルなり、 あるいはその両方なりに書き出すことができる。デフォルトでは、sudosyslog(3) 経由でログを記録するが、この動作は configure 時に、 あるいは sudoers ファイルによって、変更可能である。

オプション

sudo では以下のコマンドライン・オプションが使用できる。

通常 sudo がパスワードを要求するとき、パスワードは現在使用している ターミナルから読み込まれる。-A (askpass) を指定した場合は、 ヘルパー・プログラム (グラフィカルなものでもよい) が実行されて、ユーザの パスワードを読み込み、それを標準出力に書き出す。 環境変数 SUDO_ASKPASS が設定されているときは、 それがヘルパー・プログラムのパスになる。それ以外の場合は、 sudoers(5)askpass オプションが指定している値が使用される。
-b (background) オプションを付けると、sudo は 指定されたコマンドをバックグラウンドで実行する。-b オプションを 使用すると、シェルのジョブ制御を使ってプロセスを操作できなくなるので 注意してほしい。
通常 sudo は、標準入力、標準出力、標準エラーを除いて、オープンした すべてのファイル・ディスクリプタをクローズする。これに対し、 -C (close from) オプションを使用すると、 標準エラーより番号の大きい (すなわち、ファイル・ディスクリプタ 3 以上の) どのファイル・ディスクリプタからクローズして行くかを、ユーザが指定できる ようになる。3 未満の値は許可されない。このオプションが使用できるのは、 管理者が sudoers(5) 中で closefrom_override オプションを 有効にしたときだけである。
-E (preserve environment) オプションは sudoers(5) ファイルの env_reset オプションを無効にする。 これが使用できるのは、マッチするコマンドに SETENV タグが 付いているときか、 sudoers(5)setenv オプションがセットされているとき だけである。
-e (edit) オプションを指定するのは、ユーザーがコマンドの 実行ではなく、一つ以上のファイルの編集を望んでいるということである。 sudoers ファイルの参照では、コマンドとして 文字列 "sudoedit" が使用される。 sudoers ファイルによってユーザに権限があることが認められると、 次のようなことが順番に行われる。
1.
編集対象のファイルのコピーをテンポラリファイルとして作成する。 テンポラリファイルのオーナーは sudo を起動したユーザである。
2.
環境変数 SUDO_EDITOR, VISUAL, EDITOR のいづれかで指定されたエディタを起動して、 テンポラリファイルを編集する。 SUDO_EDITOR, VISUAL, EDITOR のいづれも設定されていないときは、 sudoers ファイルの editor 変数にリストされた 最初のプログラムが使用される。
3.
編集作業がすむと、テンポラリファイルをオリジナルのファイルに書き戻して、 テンポラリファイルを消去する。

指定されたファイルが存在しない場合は作成する。ここで注意すべきは、 sudo によって実行されるコマンドの大部分と違って、 -e でエディタが実行されるときは、sudo を起動した ユーザの環境が、変更を受けずにそのまま使われるということである。 何らかの理由で sudo が編集した内容でファイルを更新できないときは、 ユーザに警告を発し、編集した内容をテンポラリファイルに保持することになる。

通常 sudo はプライマリ・グループを、passwd データベースで 変身対象ユーザ (デフォルトでは root) のプライマリ・グループとして 指定されているグループに設定する。これに対し、-g (group) オプションを使用すると、sudo はプライマリ・グループを group に 設定して、指定のコマンドを実行することになる。グループ名の代わりに gid を指定するときは、#gid という書き方をする。 多くのシェルでは、gid としてコマンドを実行するときは、'#' を バックスラッシュ ('\') でエスケープしなければならない。なお、 -u オプションを同時に指定しない場合、コマンドは (root として ではなく) sudo を起動するユーザの資格で実行されることになる。 いづれにしろ、プライマリ・グループが group に 設定されることに変わりはない。 (訳注: -g オプションを使用するには、sudoers ファイルの ユーザ設定で変身対象となるグループを設定しておく必要がある。詳細については、 sudoers(5) のマニュアルの該当個所を参照してほしい。)
-H (HOME) オプションを指定すると、環境変数 HOME が、変身の対象となるユーザ (デフォルトでは root) の、 passwd(5) ファイルに明記されているホームディレクトリになる。 sudo はデフォルトでは、環境変数 HOME を 変更しない (sudoers(5)set_homealways_set_home フラグを参照すること)。
-h (help) オプションを指定すると、sudo は使用法を 表示して終了する。
-i (simulate initial login) オプションを指定すると、 passwd(5) 中の変身対象ユーザのエントリで指定されているシェルが ログイン・シェルとして実行される。すなわち、.profile.login といったログイン用のリソースファイルが シェルによって読み込まれるわけだ。コマンドを指定すると、それがシェルに 渡されて、実行される。それ以外の場合は、対話的シェルが 実行されることになる。sudo は、シェルを実行する前に、変身対象ユーザの ホームディレクトリに移動しようとする。また sudo は環境を初期化する。 変数 DISPLAYTERM は変更しないが、 HOME, SHELL, USER, LOGNAME, PATH をセットし、さらに Linux や AIX システムでは /etc/environment に書いてある環境変数も 設定する。それ以外の環境変数はすべて消去する。
-K (sure kill) オプションは -k オプションに 似ているが、ユーザのタイムスタンプを完全に消去してしまうという点と、 コマンドや他のオプションと組み合わせて使用できないという点で異なっている。 このオプションはパスワードを要求しない。
-k (kill) オプションを単独で使うと、sudo は タイムスタンプの日付を UNIX 紀元 (1970 年 1 月 1 日) に設定することで、 ユーザのタイムスタンプを失効させる。次回 sudo を実行するときには、 パスワードが要求されるようになるわけだ。このオプション自身はパスワードを 必要としない。なお、このオプションが追加されたのは、 ユーザが .logout ファイルで、パスワードなしでの sudo の実行を 無効にすることができるようにするためである。

-k オプションをコマンドや、パスワードを必要とするような 他のオプションと組み合わせて使用すると、sudo はユーザの タイムスタンプ・ファイルを無視するようになる。その結果、sudo は (sudoers の設定でパスワードを要求するようになっているならば) プロンプトを出してパスワードを求めるものの、 ユーザのタイムスタンプ・ファイルの日付を更新することはない。

-L (list defaults) オプションは、sudoers ファイルの Defaults 行で設定できるパラメーターを列挙し、それぞれについて 簡単に説明する。このオプションは grep(1) と一緒に使うと、便利である。
command を指定しない場合、-l (list) オプションは、 sudo を実行したユーザ (あるいは、-U で指定したユーザ) が 現在ログインしているホストで許可されている (及び、禁じられている) コマンドを 列挙する。command を指定した場合は、sudoers で許可されて いるコマンドならば、その絶対パスを表示する (訳注: sudo-1.7.2 では、 sudoers でコマンドの引き数を明示的に指定している場合は、 コマンドラインからも -l とコマンドに続けて、引き数まで正しく 指定しなければならない)。 指定したコマンドが許可されていない場合は、sudo が 返り値 1 で終了する。-l オプションに l 引数を付けた場合や (すなわち -ll)、-l を複数回指定した場合は、長い方の リスト形式が使用される。
-n (non-interactive) オプションがあると、sudo は ユーザにパスワードを要求するプロンプトを出さない。実行するコマンドに パスワードが必要な場合、sudo はエラーメッセージを表示して、 終了する。
-P (preserve group vector) オプションを指定すると、 sudo は、sudo を実行するユーザが所属するグループのリストを、 変更せずにそのまま使用する。 デフォルトでは、sudo は 所属グループの初期値として、変身対象となるユーザが所属するグループのリストを 設定するのだ。とは言え、実 gid や 実効 gid が変身対象ユーザと 同一になるようにセットされる点には、変わりがない。
-p (prompt) オプションを使うと、デフォルトのパスワード プロンプトを変更して、好きな文句にすることができる。以下のパーセント (`%') エスケープが使用できる。
%H
ドメイン名を含むローカルホスト名に展開される (マシンのホスト名が 完全修飾名であるか、sudoers ファイルで fqdn オプションが セットされている場合に有効)
%h
ドメイン名なしのローカルホスト名に展開
%p
パスワードを要求されるユーザ名に展開 (sudoers ファイルのフラグ rootpwtargetpwrunaspw を尊重する)
%U
変身対象になる (デフォルトでは root) ユーザのログイン名に展開される
%u
sudo を起動するユーザのログイン名に展開される
%%
連続した二つの % は、一個の % 文字 そのものを意味する

-p で指定したプロンプトが、PAM をサポートしている システムにおいてシステムのパスワードプロンプトを上書きするのは、 sudoerspassprompt_override が有効になっている場合である (訳注: sudoers(5) の passprompt_override の項も参照してほしい)。

-S (stdin) オプションを指定すると、sudo はパスワー ドをターミナルデバイスからではなく、標準入力から読み込む。
-s (shell) は、環境変数 SHELL が設定されていれば、 そのシェルを、さもなければ、passwd(5) で指定されているシェルを 実行する。コマンドが指定された場合は、それをシェルに渡して実行させる。 コマンドが指定されていなければ、対話的シェルを開く。
-U (other user) オプションは、-l と組み合わせて 使用し、誰の権限の一覧を表示するかを指定する。root のほかには、 現在のホストでコマンドに ALL を許されているユーザのみが このオプションを使用できる。
-u (user) オプションを指定すると、sudoroot 以外のユーザとして指定されたコマンドを実行する。 ユーザ名の代わりに uid を指定するときは、#uid という 書き方をする。多くのシェルでは、uid の資格でコマンドを 実行するときは、'#' をバックスラッシュ ('\') でエスケープしなければ ならない。sudoers ファイルの Defaults 行で targetpw オプションが 設定されているときは (sudoers(5) 参照)、パスワード・データベースに 記載されていない uid ではコマンドを実行できないことに注意してほしい。
-V (version) オプションを指定すると、sudo は バージョンナンバーを表示して、終了する。sudo -V を実行するユーザが root だった場合は、sudo がコンパイルされたときのデフォルト値のリストを、 マシンのローカル IP アドレスとともに表示する。
-v (validate) オプションを指定すると、sudo はユーザの タイムスタンプを更新する。このとき、もし必要なら、パスワードの入力を促す。 このオプションによって sudo のタイムアウト時間がもう 5 分間 (あるいは、何分であれ、sudoers で 設定されたタイムアウト時間) 伸びるが、このオプションがコマンドを実行する ことはない。
--
-- オプションがあると、sudo はそこでコマンドライン引き数の 処理をやめる。これは -s オプションと組み合わせて使うと、 大変便利である。

さらに、コマンドのためにセットしたい環境変数も、 VAR=value、たとえば LD_LIBRARY_PATH=/usr/local/pkg/lib といった形で コマンドラインから渡すことができる。コマンドラインから渡される変数は、 通常の環境変数と同じ制限の対象になるが、一つだけ重要な違いがある。 sudoers ファイルで setenv オプションが設定されているか、 実行されるコマンドに SETENV タグがついているか、 あるいは、マッチするコマンドが ALL である場合は、 ユーザがほかの状況でなら禁じられているような変数をセットすることが できるのだ。詳細については sudoers(5) を参照してほしい。

返り値

プログラムの実行に成功した場合、sudo が返す終了ステータスは、 実行したプログラムの終了ステータスそのものである。

そうでない場合、設定やパーミッションに問題があったり、sudo が 指定されたコマンドを実行できなかったりしたときは、sudo は 返り値 1 で終了する。後者の場合は、エラーメッセージが標準エラーに 表示される。また、 sudo がユーザの PATH にある 一つ以上のエントリを stat(2) できなかったときも、エラーが 標準エラーに出力される (ただし、そのディレクトリが存在しなかったり、 実際にはディレクトリでなかった場合は、そのエントリは無視され、エラーは 表示されない)。そうしたことは、正常な環境では起きるはずのないことである。 stat(2) が "permission denied" を返す理由で 一番よくあるのは、ユーザーがオートマウントを使用していて、 PATH にあるディレクトリの一つが目下到達不可能なマシンに ある場合だ。

セキュリティに関する注意点

sudo は外部のコマンドをできるだけ安全に実行しようとする。

環境変数を扱うにあたって、二つの異なる行き方がある。デフォルトでは、 sudoersenv_reset オプションが有効になっている。 この場合は、最小限の環境でコマンドが実行されることになるが、その環境とは、 TERM, PATH, HOME, SHELL, LOGNAME, USER, USERNAME、それに sudo という 呼び出し側のプロセスから来た変数で、sudoersenv_checkenv_keep オプションによって許可されたものである。言わば、 環境変数のホワイトリストが存在することになるわけだ。

他方、sudoers ファイルで env_reset オプションが無効に なっている場合は、いかなる変数も、env_checkenv_delete オプションで明示的に拒否されていないかぎり、呼び出し側のプロセスから 継承される。この場合、env_checkenv_delete はブラックリストの ように振る舞うわけだ。危険性のある環境変数のすべてをブラックリストに 入れることは不可能なので、env_reset のデフォルトの動作を使用する方を お勧めする。

どんな場合でも、() で始まる値を持つ環境変数は 除去されるが、それは bash の関数と解釈されかねないからだ。 sudo が許可、または拒否する環境変数のリストは、 sudo -V を root として実行したときの出力中に表示される。

たいていのオペレーティングシステムのダイナミック・リンカは、 ダイナミック・リンキングを制御する働きのある環境変数を、sudo も その一つである setuid プログラムの環境から除去するものだということに注意して ほしい。オペレーティングシステムが何であるかにもよるが、そうした環境変数には、 _RLD*, DYLD_*, LD_*, LDR_*, LIBPATH, SHLIB_PATH などが 含まれるだろう。この種の変数は、sudo の実行が始まるよりも前に、 環境から除去される。それ故、sudo がそうした変数を保持することは 不可能である。

偽コマンドの実行 (command spoofing) を防止するため、sudo は コマンドを捜してユーザの PATH を検索する際に、"." と "" (どちらもカレントディレクトリを意味する) を最後に調べる (そのどちらか、 あるいは両方が PATH 中に存在すればだが)。とは言え、環境変数 PATH そのものは変更されずに、そのまま sudo が 実行するプログラムに渡されることに注意してほしい。

sudo はタイムスタンプ・ディレクトリ (デフォルトでは /var/run/sudo) の所有者を調べて、所有者が root でなかったり、 root 以外のユーザにも書き込みが可能だったりした場合は、そのディレクトリの 中身を無視する。root 以外のユーザでも chown(2) を利用して ファイルの所有者を変えられるシステムでは、タイムスタンプ・ディレクトリが (たとえば /tmp といった) 誰にでも書き込めるディレクトリにあると、 一般ユーザが、sudo を実行する前にタイムスタンプ・ディレクトリを 作成することが可能になる。もっとも、sudo はタイムスタンプ・ ディレクトリとその中身の、所有者とモードをチェックしているので、 起こりえる唯一の被害は、ファイルを「隠匿」する目的でそのディレクトリに 入れて置かれることぐらいだ。これはあまりありそうにないことだ。なぜなら、 タイムスタンプ・ディレクトリが root の所有になり、ほかのユーザによる アクセスが禁じられてしまうと、ファイルをそこに置いたユーザは それを回収できなくなるからである。この問題を回避したかったら、 誰でも書き込めるわけではないディレクトリ (たとえば /var/adm/sudo) を タイムスタンプ用に使用するなり、適切な所有者 (root) と パーミッション (0700) を持った /var/run/sudo をシステムの スタートアップ・ファイルで作成するなりすればよい。

sudo はあまりにも未来に設定したタイムスタンプを認めない。タイ ムスタンプが「現在時 + 2 * TIMEOUT」より新しい日時だっ た場合、sudo はそれを無視し、ログに記録して警告を発する。このよ うになっているのは、一般ユーザがファイルの所有者を変えられるシステムで、 ユーザがいい加減な日付を付けて勝手に自分のタイムスタンプを作れないよう にするためである。

sudo は通常、自分が明示的に実行したコマンドしかログに 記録しないことに気を付けてほしい。 ユーザが sudo su とか sudo sh とか いったコマンドを実行した場合、そのシェルから続いて実行されるコマンドは 記録されないし、sudo によるアクセス制御もそういったコマンドに 及ばないことになる。 シェル・エスケープを提供するコマンドについても (たいていのエディタが それに含まれる) 同じことが言える。 それ故、ユーザに sudo 経由でコマンドの使用を許すときは、 気がつかないうちにそのコマンドがユーザに事実上ルート・シェルを 与えていないかを、念には念を入れて確認しなければならない。もっと詳しいことが 知りたかったら、sudoers(5) の「シェル・エスケープを防止する」の セクションを御覧になってほしい。

環境変数

sudo は以下の環境変数を利用する。

変数 SUDO_EDITORVISUAL が設定されて いないとき、-e (sudoedit) モードで使用するデフォルトのエディタ
-i-H モードでは (あるいは、sudo が configure され たとき --enable-shell-sets-home オプションが与えられていれば)、 変身対象ユーザのホームディレクトリにセットされる
sudoers の secure_path オプションが設定されていれば、無難な値に セットされる
-s オプションで実行されるシェルを決めるのに使用する
ターミナルが利用できない場合や、-A オプションが 指定されている場合に、パスワードを読み込むのに使用するヘルパープログラムの パスを指定する
sudo が実行するコマンドにセットされる
-e (sudoedit) モードで使用するデフォルトのエディタ
sudo を起動したユーザのグループ ID にセットされる
デフォルトのパスワード・プロンプトとして使用する
設定すると、実行されるプログラムの PS1 がこの変数の値に セットされる
sudo を起動したユーザのユーザ ID にセットされる
sudo を起動したユーザのログイン名にセットされる
変身対象ユーザにセットされる (オプション -u が指定されていなければ、 root になる)
変数 SUDO_EDITOR が設定されていない場合に、 -e (sudoedit) モードで使用するデフォルトのエディタ

ファイル

/etc/sudoers
誰が何を実行できるかのリスト
/var/run/sudo
タイムスタンプが存在するディレクトリ
/etc/environment
Linux や AIX で -i モードを使うときの初期環境

用例

注意: 以下の例は、sudoers(5) に適切な記載があることを前提にして いる。

読み取り不可のディレクトリのファイル一覧を取得する。

 $ sudo ls /usr/local/protected

ユーザ yaz のホームディレクトリのファイル一覧を取得したいのだが、 ~yaz を含むファイルシステムが別のマシンにあって、root で アクセスできるようにエクスポートされていない場合。

 $ sudo -u yaz ls ~yaz

ユーザ www として index.html ファイルを編集する。

 $ sudo -u www vi ~www/htdocs/index.html

root と adm グループのユーザだけがアクセスできるシステムログを閲覧する。

 $ sudo -g adm view /var/log/syslog

jim に変身してエディタを実行する。プライマリグループには別のグループを 指定する。

 $ sudo -u jim -g audio vi ~jim/sound.txt

マシンをリブートする。

 $ sudo shutdown -r +15 "quick reboot"

/home パーティションに存在するディレクトリのディスク使用量リストを作成 する。cd やファイル・リダイレクションがきちんと動 作するように、コマンドをサブシェルで実行していることに注目してほしい。

 $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

関連項目

grep(1), su(1), stat(2), passwd(5), sudoers(5), visudo(8)

作者

多数の人々が長年に渡って sudo の製作に取り組んできた。当バージョ ンは主として次の者が書いたコードからできている。

        Todd C. Miller

sudo の簡単な履歴については、配布物中の HISTORY ファイルか、 http://www.sudo.ws/sudo/history.html を御覧いただきたい。

警告

ユーザが sudo 経由で任意のコマンドの実行を許されているならば、 そのユーザがルート・シェルを獲得するのを防止する簡単な方法はない。 また、(エディタを含む) 多くのプログラムが、シェル・エスケープを通して ユーザがコマンドを実行できるようにしており、この方法でユーザは sudo の チェックを回避することができる。とは言え、たいていのシステムでは、 sudonoexec 機能を用いてシェル・エスケープを阻止する ことが可能だ。詳細については、 sudoers(5) のマニュアルを参照してほしい。

下記のように sudo を通して直接 cd コマンドを実行して も意味がない。

 $ sudo cd /usr/local/protected

なぜなら、コマンドが終了したとき、その親プロセス (あなたのシェルだ) は 相変わらず元の状態のままだからだ。より詳しく知りたかったら、「用例」セ クションを御覧になってほしい。

もし sudoers ファイルでユーザに許可するコマンドが ALL になっているならば、ユーザ設定でどんな 項目に '!' を付けようとも、ユーザが自分でプログラムを作って、 ルート・シェルを獲得するのを防ぐすべはまったくない。

sudo を介してシェルスクリプトを実行すると、ある種のオペレーティ ングシステムで setuid シェルスクリプトを危険なものにしているのと同一の カーネルのバグが表面化するおそれがある (使用している OS に /dev/fd/ ディレクトリがあれば、setuid シェルスクリプトはたいてい安全で ある)。

バグ

sudo にバクを発見したと思ったら、下記のページにアクセスして、 バグレポートを提出していただきたい。
http://www.sudo.ws/sudo/bugs/

サポート

ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。 購読やアーカイブの検索には下記 URL を御覧になること。
http://www.sudo.ws/mailman/listinfo/sudo-users

免責

sudo は「現状のまま」提供される。明示的な、あるいは黙示的な いかなる保証も、商品性や特定目的への適合性についての黙示的な保証を含め、 またそれのみに止まらず、これを否認する。詳細な全文については、 sudo と一緒に配布されている LICENSE ファイルや 下記 Web ページを御覧いただきたい。
http://www.sudo.ws/sudo/license.html

June 15, 2009 1.7.2p1